package com.chancein.cloud.report.charts;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import static com.chancein.cloud.ocr.process.util.HsOcrUtils.picOcrUrl;
import static com.chancein.cloud.report.charts.common.constant.CommonConstant.*;
import static com.chancein.cloud.report.charts.config.InitParamConfig.*;
import static com.chancein.cloud.report.charts.service.ReportChartsService.*;

/**
 * 启动类
 *
 * @author: LiaoZiHao
 * @date: 2023/7/27 19:09
 * Copyright © 2022 Hundsun Technologies Inc. All Rights Reserved
 */
@Slf4j
public class ReportChartsApplication {

    public static void main(String[] args) {
        // 设置日志级别，只能看到 INFO 级别以上的日志
        ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
        rootLogger.setLevel(ch.qos.logback.classic.Level.INFO);
        // 初始化
        init();
        // 按照配置文件选择使用什么方式来生成数据
        if (StrUtil.equals(ProgramType, GENERATE_DATA)) {
            generateData();
        } else if (StrUtil.equals(ProgramType, REPAIR_DATA)) {
            repairData();
        } else {
            log.error("配置文件[programType]参数只能为[0]或[1]");
        }
    }

    public static void init() {
        log.info("------------ ReportChartsApplication init start -------------");
        /*
         * 读取 config 文件中的 initParam.json，提取变量
         */
        File file = new File(INIT_CONFIG_PATH);
        if (!file.exists()) {
            log.error("[初始化变量配置文件]不存在...");
            System.exit(0);
        }
        log.info("------------ initParam.json Loading -------------");
        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            StringBuilder sb = new StringBuilder();
            String line;
            // 省去每一行字符串中的前后空格，拼接成一行完整的 Json
            while ((line = reader.readLine()) != null) {
                sb.append(line.trim());
            }
            String config = sb.toString();
            // 解析初始化配置文件
            JSONObject paramJson = JSON.parseObject(config);
            // 必选字段
            ProgramType = paramJson.getString(PROGRAM_TYPE);
            ThreadNum = paramJson.getInteger(THREAD_NUM);
            ServerUrl = paramJson.getString(SERVER_URL);
            picOcrUrl = paramJson.getString(OCR_URL);
            // 生成数据必选字段
            if (StrUtil.equals(ProgramType, GENERATE_DATA)) {
                Year = paramJson.getInteger(YEAR);
                Month = paramJson.getInteger(MONTH);
            }
            // 修复数据必选字段
            if (StrUtil.equals(ProgramType, REPAIR_DATA)) {
                JSONArray repairFileJsonArr = paramJson.getJSONArray(REPAIR_FILE_NAME);
                for (int i = 0; i < repairFileJsonArr.size(); i++) {
                    FileList.add(repairFileJsonArr.getString(i));
                }
            }
        } catch (IOException e) {
            log.error("加载[初始化变量配置文件]失败...");
            System.exit(0);
        }
        log.info("[配置加载]programType=[" + ProgramType + "]");
        log.info("[配置加载]开启[" + ThreadNum + "]条线程");
        log.info("[配置加载]数据时间[" + Year + "年" + Month + "月]");
        log.info("[配置加载]图片存放地址[" + ServerUrl + "]");
        log.info("[配置加载]OCR解析地址[" + picOcrUrl + "]");
        log.info("------------ initParam.json Load success -------------");
    }
}
